import pygame,os,sys
from pygame.locals import *
import Tkinter

import tkMessageBox
import tkSimpleDialog
from Tkinter import *

pygame.init()

screen = pygame.display.set_mode((600,600))
pygame.display.set_caption('Hipersnake - Cristimas Snake')

class Persistencia:                    
    def __init__(self,score):     
        self.nome_arquivo = 'recordes.txt'
        self.fonte1 = pygame.font.SysFont('Arial',20)    # escolher uma fonte que tenha na maioria dos sistemas
        self.cor1 = (0,0,255)     # letra do titulo
        self.cor2 = (255,0,0)    # texto dos recordes
        self.score = score
        self.background = pygame.image.load('Imagens' + os.sep + 'imagem_menu_def.jpg')

    def desenhar_imagem_recordes(self):
        arquivo = open(self.nome_arquivo,'r')
        conteudo = arquivo.readlines()
        arquivo.close()
        screen.blit(self.background,(0,0))
        screen.blit(self.fonte1.render('RECORDES', True, self.cor1), (200,150))   # blita o titulo

        try:
            if not self.verificar_arquivo_vazio():
                mapa_nome_pontuacao = {}
                i = 1
                for linha in conteudo:
                    linha = linha.split('|')                    
                    mapa_nome_pontuacao[i] = (int(linha[1]),linha[0])
                    i += 1

                pontuacoes_ordenadas = mapa_nome_pontuacao.values()
                pontuacoes_ordenadas.sort()   # lista de tuplas

                pontuacoes_ordenadas = pontuacoes_ordenadas[::-1]

                i = 200
                j = 200
                for tupla in pontuacoes_ordenadas[:8]:
                    screen.blit(self.fonte1.render('%s    %d' % (tupla[1],int(tupla[0])), True, self.cor2),(i,j))    # return Surface
                    j += 60

        except IndexError:
            screen.blit(self.fonte1.render('Nao ha recordistas', True, self.cor2),(200,200))    # return Surface
                
    def verificar_arquivo_vazio(self):
        arquivo = open(self.nome_arquivo,'r')
        conteudo = arquivo.read()
        if conteudo == '':
            return True
        return False

    def fazer_persistencia(self,pontuacao):    # tem que garantir que ele vai digitar valor validos (no nome)
        arquivo = open(self.nome_arquivo,'a')   # para soh entao salvar
        arquivo.write('%s|%d\n' % (self.__entrar_nome_usuario(),pontuacao))  
        arquivo.close()
    
    def __entrar_nome_usuario(self):    # eh um metodo privado
        root = Tk()
        root.withdraw()
         
        nome = tkSimpleDialog.askstring('%-100s' % 'Recordes','Digite seu nome')
        tkMessageBox.showinfo('%-100s' % 'Parabens! ',nome)
        return nome
